// 读取 用可读流， 可以分段读取，可暂停可以恢复  基于文件模块的可读流

const fs = require("fs");
const path = require("path");
const ReadStream = require("./ReadStream");

//        flags?: string | undefined;
//         encoding?: BufferEncoding | undefined;
//         fd?: number | promises.FileHandle | undefined;
//         mode?: number | undefined;
//         autoClose?: boolean | undefined;
//         emitClose?: boolean | undefined;
//         start?: number | undefined;
//         signal?: AbortSignal | null | undefined;
//         highWaterMark?: number | undefined;
const rs = new ReadStream(path.resolve(__dirname, "copy.txt"), {
  // const rs = fs.createReadStream(path.resolve(__dirname, "copy.txt"), {
  flags: "r", // 默认不写就是 r 表示我要读取
  autoClose: true,
  emitClose: true,
  start: 5,
  highWaterMark: 3, // 水位线，每次读取几个  fs.open(flags,mode)  fs.read(start,highWaterMark)  fs.close()
});
// 返回的是一个可读流对象
rs.on("error", function (err) {
  console.log("出错", err);
});
// fs 模块中的可独流 都有打开关闭的方法
rs.on("open", function (fd) {
  console.log(fd, "open");
});
const arr = [];
rs.on("data", function (chunk) {
  // 这里不能用字符串拼接，无法保证内容是字符串
  arr.push(chunk);
  console.log(chunk);
  rs.pause(); // 不在触发data事件
});
rs.on("end", function () {
  console.log(Buffer.concat(arr).toString());
});

rs.on("close", function () {
  console.log("close");
});

// setInterval(() => {
//   rs.resume();
// }, 1000);

// 解决了 readFile的问题， 可以按需读取
// 用法简单 （特点是异步的，非阻塞）

// 可读流 两个常用的方法 on('data') on('end') , 两个不常用的 rs.pause() rs.resume()  只有文件里面才有的方法 on('open') on('close')
// 错误处理 on('error')
